package com.micangcaihang.micang.util;

import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.micangcaihang.common.utils.Utils;

/**
 * <pre>
 *     author : Fandy
 *     e-mail : fandayongfly@gmail.com
 *     time   : 2017/8/13
 *     update : 2017/8/13
 *     desc   : MiCang
 *     version: 1.0
 * </pre>
 */
public class LocationUtil {
    private static AMapLocationClient sClient;
    private AMapLocationClientOption locationOption = null;

    public static AMapLocationClient getLoader() {
        if (sClient == null) {
            synchronized (LocationUtil.class) {
                if (sClient == null) {
                    sClient = new AMapLocationClient(Utils.getContext());
                    sClient.setLocationOption(getDefaultOption());
                }
            }
        }
        return sClient;
    }

    public void setLocationOption(AMapLocationClientOption locationOption) {
        this.locationOption = locationOption;
    }

    /**
     * 默认的定位参数
     *
     * @author hongming.wang
     * @since 2.8.0
     */
    private static AMapLocationClientOption getDefaultOption() {
        AMapLocationClientOption mOption = new AMapLocationClientOption();
        mOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//可选，设置定位模式，可选的模式有高精度、仅设备、仅网络。默认为高精度模式
        mOption.setGpsFirst(false);//可选，设置是否gps优先，只在高精度模式下有效。默认关闭
        mOption.setHttpTimeOut(30000);//可选，设置网络请求超时时间。默认为30秒。在仅设备模式下无效
        mOption.setInterval(3000);//可选，设置定位间隔。默认为2秒
        mOption.setNeedAddress(true);//可选，设置是否返回逆地理地址信息。默认是true
        mOption.setOnceLocation(false);//可选，设置是否单次定位。默认是false
        mOption.setOnceLocationLatest(false);//可选，设置是否等待wifi刷新，默认为false.如果设置为true,会自动变为单次定位，持续定位时不要使用
        AMapLocationClientOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTP);//可选， 设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTP
        mOption.setSensorEnable(false);//可选，设置是否使用传感器。默认是false
        mOption.setWifiScan(true); //可选，设置是否开启wifi扫描。默认为true，如果设置为false会同时停止主动刷新，停止以后完全依赖于系统刷新，定位位置可能存在误差
        mOption.setLocationCacheEnable(true); //可选，设置是否使用缓存定位，默认为true
        return mOption;
    }

    public static void startLocation() {
        sClient.startLocation();
    }

    public static void stopLocation() {
        sClient.stopLocation();
    }

    public static void destoryLocation() {
        sClient.onDestroy();
    }
}
